package com.lh.nk;


import java.util.ArrayList;
import java.util.List;

/**
 * @author: linghao
 * @since: 2023/1/29
 *
 * 描述
 * 给定一棵二叉树，分别按照二叉树先序，中序和后序打印所有的节点
 */
public class 实现二叉树先序中序和后序遍历NC45 {

    public int[][] threeOrders (TreeNode root) {
        // write code here
//        int[][] res = new int[3][3];
        //前序
        List<Integer> listPer = new ArrayList<>();
        pre(listPer,root);
        int[] per = new int[listPer.size()];
        for(int i=0;i<listPer.size();i++){
            per[i] = listPer.get(i);
        }
        //中序
        listPer = new ArrayList<>();
        in(listPer,root);
        int[] in = new int[listPer.size()];
        for(int i=0;i<listPer.size();i++){
            in[i] = listPer.get(i);
        }
        //后续
        listPer = new ArrayList<>();
        post(listPer,root);
        int[] post = new int[listPer.size()];
        for(int i=0;i<listPer.size();i++){
            post[i] = listPer.get(i);
        }
        int[][] res = {per,in,post};
        return res;
    }

    public static void pre(List<Integer> res,TreeNode node){
        if(node == null)return;
        res.add(node.val);
        pre(res,node.left);
        pre(res,node.right);
    }
    public static void in(List<Integer> res,TreeNode node){
        if(node == null)return;
        in(res,node.left);
        res.add(node.val);
        in(res,node.right);
    }
    public static void post(List<Integer> res,TreeNode node){
        if(node == null)return;
        post(res,node.left);
        post(res,node.right);
        res.add(node.val);
    }

}


  class TreeNode {
   int val = 0;
   TreeNode left = null;
   TreeNode right = null;
 }
